﻿using System;
using System.Collections.Generic;
using System.Text;

using System.Data;
using System.Data.Odbc;
using WLMCoreLibrary;

using System.Xml;
using System.Xml.Serialization;
using System.ComponentModel;
using System.CodeDom.Compiler;
using System.Configuration;
using System.IO;


namespace SAW_Core
{
    [Serializable]
    [DesignerCategory("code")]
    [XmlRoot(Namespace = "http://wlm.com.mx/SAI/cliente", IsNullable = false)]
    [XmlType(AnonymousType = true, Namespace = "http://wlm.com.mx/SAI/cliente")]
    [GeneratedCode("xsd", "2.0.50727.3038")]
    public class Cliente : BaseClass
    {


        #region public properties
        [XmlIgnore()]
        public int idEmpresa { get; set; }
        [XmlAttributeAttribute()]
        public String NoCliente { get; set; }
        [XmlAttributeAttribute()]
        public String RazonSocial { get; set; }
        [XmlAttributeAttribute()]
        public String NombreComercial { get; set; }
        [XmlAttributeAttribute()]
        public String RepresentanteLegal { get; set; }
        [XmlAttributeAttribute()]
        public String RFC { get; set; }
        [XmlAttributeAttribute()]
        public String Email { get; set; }
        public Direccion DireccionFacturacion { get; set; }
        public Direccion DireccionEnvio { get; set; }
        //public String F_Calle { get;set; }
        //public String F_NumeroExterior { get;set; }
        //public String F_NumeroInterior { get;set; }
        //public String F_Colonia { get;set; }
        //public String F_Municipio { get;set; }
        //public String F_Ciudad { get;set; }
        //public String F_Estado { get;set; }
        //public String F_CP { get;set; }

        //public String Calle { get;set; }
        //public String NumeroExterior { get;set; }
        //public String NumeroInterior { get;set; }
        //public String Colonia { get;set; }
        //public String Ciudad { get;set; }
        //public String Municipio { get;set; }
        //public String Estado { get;set; }
        //public String CP { get;set; }
        [XmlAttributeAttribute()]
        public String Telefono { get; set; }
        [XmlAttributeAttribute()]
        public String Telefono2 { get; set; }
        [XmlAttributeAttribute()]
        public String Telefono3 { get; set; }
        [XmlAttributeAttribute()]
        public String FAX { get; set; }
        [XmlAttributeAttribute()]
        public String LineaTransporte { get; set; }
        [XmlAttributeAttribute()]
        public int idLineaTransporte { get; set; }
        [XmlAttributeAttribute()]
        public Decimal SaldoActual { get; set; }
        [XmlAttributeAttribute()]
        public Decimal LimiteCredito { get; set; }
        [XmlAttributeAttribute()]
        public String WebSite { get; set; }
        public String Observaciones { get; set; }
        [XmlAttributeAttribute()]
        public Boolean activo { get; set; }
        [XmlAttributeAttribute()]
        public int idListaPrecios { get; set; }
        [XmlAttributeAttribute()]
        public string ListaPrecios
        {
            get
            {
                switch (idListaPrecios)
                {
                    case 1:
                        return "A";
                        break;
                    case 2:
                        return "B";
                        break;
                    case 3:
                        return "C";
                        break;
                    case 4:
                        return "D";
                        break;
                    case 5:
                        return "F";
                        break;
                    default:
                        return "A";
                };
            }
            set { }
        }
        [XmlAttributeAttribute()]
        public int idVendedor { get; set; }
        [XmlAttributeAttribute()]
        public int idCategoria { get; set; }
        [XmlAttributeAttribute()]
        public int idCondicionesPago { get; set; }
        [XmlIgnore()]
        public List<Contacto> Contactos { get; set; }

        [XmlAttributeAttribute()]
        public string NombreCategoria { get; set; }
        [XmlAttributeAttribute()]
        public string NombreVendedor { get; set; }
        [XmlAttributeAttribute()]
        public string NombreCondicionesPago { get; set; }
        [XmlAttributeAttribute()]
        public Decimal UltimaCompra { get; set; }
        [XmlAttributeAttribute()]
        public DateTime FechaUltimaCompra { get; set; }
        [XmlAttributeAttribute()]
        public Decimal UltimoPago { get; set; }
        [XmlAttributeAttribute()]
        public DateTime FechaUltimoPago { get; set; }
        [XmlAttributeAttribute()]
        public Decimal UltimaCotizacion { get; set; }
        [XmlAttributeAttribute()]
        public DateTime FechaUltimaCotizacion { get; set; }
        #endregion

        #region constructors

        public Cliente()
        {
            DireccionEnvio = new Direccion();
            DireccionFacturacion = new Direccion();
        }

        public Cliente(ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            GUID = classBinder.NewGUID("CLIENTES");
            string queryString = "SELECT * FROM CLIENTES WHERE GUID='" + GUID.ToString() + "'";
            GetRecord(queryString);
        }

        public Cliente(int registryId, ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            string queryString = "";
            queryString = "SELECT * FROM CLIENTES WHERE id='" + registryId + "'";
DireccionFacturacion = new Direccion();
            DireccionEnvio = new Direccion();
            this.GetRecord(queryString);
            Contactos = new ContactoCollection(this, ref ConexionDB).Elementos;
        }

        public Cliente(Guid guid, ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            string queryString =  "SELECT * FROM CLIENTES WHERE GUID='" + guid.ToString() + "'";
            DireccionFacturacion = new Direccion();
            DireccionEnvio = new Direccion();
            this.GetRecord(queryString);
            Contactos = new ContactoCollection(this, ref ConexionDB).Elementos;
        }

        public Cliente(DataRow dataRow, ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            this.GetRecord(dataRow);
        }
        #endregion

        #region public methods

        public void GenerarArchivoXML()
        {
            StringBuilder salida = new StringBuilder();
            XmlSerializer serializer = new XmlSerializer(typeof(Cliente));

            string rutaArchivos = "";
            string nombreArchivo = id.ToString("00000");

            rutaArchivos += "ClientesXML/" + id.ToString("00000") + "/";
            DirectoryInfo directorio = new DirectoryInfo(ConfigurationManager.AppSettings["sitePath"] + rutaArchivos);
            if (!directorio.Exists)
                directorio.Create();



            string archivo = ConfigurationManager.AppSettings["sitePath"] + rutaArchivos + nombreArchivo + ".xml";
            TextWriter tw = new StreamWriter(archivo);
            serializer.Serialize(tw, this);
            tw.Close();

            //PDFCreator pdf = new PDFCreator();
            //pdf.CrearPDFdeHTML(WLMFunctions.TransformXML(ConfigurationManager.AppSettings["siteURL"] + rutaArchivos + nombreArchivo + ".xml", ConfigurationManager.AppSettings["siteURL"] + "cotizacionImpresion.xsl"), nombreArchivo + ".pdf", rutaArchivos, false, false);
        }

        public void Delete()
        {
            string queryString = "";
            queryString = "update CLIENTES set activo='0' WHERE id='" + this.id + "'";
            ConexionDBInterna.ExecuteCommand(queryString);

        }
        #endregion

        #region Private Methods
        private void GetRecord(string queryString)
        {
            OdbcDataReader reader = ConexionDBInterna.ExecuteReader(queryString);
            if (reader.HasRows)
            {
                GetKeyData(reader);
                if (!reader.IsDBNull(reader.GetOrdinal("idEmpresa")))
                    idEmpresa = (System.Int32)reader["idEmpresa"];
                if (!reader.IsDBNull(reader.GetOrdinal("NoCliente")))
                    NoCliente = (System.String)reader["NoCliente"];
                if (!reader.IsDBNull(reader.GetOrdinal("RazonSocial")))
                    RazonSocial = (System.String)reader["RazonSocial"];
                if (!reader.IsDBNull(reader.GetOrdinal("NombreComercial")))
                    NombreComercial = (System.String)reader["NombreComercial"];
                if (!reader.IsDBNull(reader.GetOrdinal("RepresentanteLegal")))
                    RepresentanteLegal = (System.String)reader["RepresentanteLegal"];
                if (!reader.IsDBNull(reader.GetOrdinal("RFC")))
                    RFC = (System.String)reader["RFC"];
                if (!reader.IsDBNull(reader.GetOrdinal("Email")))
                    Email = (System.String)reader["Email"];


                if (!reader.IsDBNull(reader.GetOrdinal("F_Calle")))
                    DireccionFacturacion.Calle = (System.String)reader["F_Calle"];
                if (!reader.IsDBNull(reader.GetOrdinal("F_NumeroExterior")))
                    DireccionFacturacion.NumeroExterior = (System.String)reader["F_NumeroExterior"];
                if (!reader.IsDBNull(reader.GetOrdinal("F_NumeroInterior")))
                    DireccionFacturacion.NumeroInterior = (System.String)reader["F_NumeroInterior"];
                if (!reader.IsDBNull(reader.GetOrdinal("F_Colonia")))
                    DireccionFacturacion.Colonia = (System.String)reader["F_Colonia"];
                if (!reader.IsDBNull(reader.GetOrdinal("F_Municipio")))
                    DireccionFacturacion.Municipio = (System.String)reader["F_Municipio"];
                if (!reader.IsDBNull(reader.GetOrdinal("F_Ciudad")))
                    DireccionFacturacion.Ciudad = (System.String)reader["F_Ciudad"];
                if (!reader.IsDBNull(reader.GetOrdinal("F_Estado")))
                    DireccionFacturacion.Estado = (System.String)reader["F_Estado"];
                if (!reader.IsDBNull(reader.GetOrdinal("F_CP")))
                    DireccionFacturacion.CP = (System.String)reader["F_CP"];

                if (!reader.IsDBNull(reader.GetOrdinal("Calle")))
                    DireccionEnvio.Calle = (System.String)reader["Calle"];
                if (!reader.IsDBNull(reader.GetOrdinal("NumeroExterior")))
                    DireccionEnvio.NumeroExterior = (System.String)reader["NumeroExterior"];
                if (!reader.IsDBNull(reader.GetOrdinal("NumeroInterior")))
                    DireccionEnvio.NumeroInterior = (System.String)reader["NumeroInterior"];
                if (!reader.IsDBNull(reader.GetOrdinal("Colonia")))
                    DireccionEnvio.Colonia = (System.String)reader["Colonia"];
                if (!reader.IsDBNull(reader.GetOrdinal("Ciudad")))
                    DireccionEnvio.Ciudad = (System.String)reader["Ciudad"];
                if (!reader.IsDBNull(reader.GetOrdinal("Municipio")))
                    DireccionEnvio.Municipio = (System.String)reader["Municipio"];
                if (!reader.IsDBNull(reader.GetOrdinal("Estado")))
                    DireccionEnvio.Estado = (System.String)reader["Estado"];
                if (!reader.IsDBNull(reader.GetOrdinal("CP")))
                    DireccionEnvio.CP = (System.String)reader["CP"];

                if (!reader.IsDBNull(reader.GetOrdinal("Telefono")))
                    Telefono = (System.String)reader["Telefono"];
                if (!reader.IsDBNull(reader.GetOrdinal("Telefono2")))
                    Telefono2 = (System.String)reader["Telefono2"];
                if (!reader.IsDBNull(reader.GetOrdinal("Telefono3")))
                    Telefono3 = (System.String)reader["Telefono3"];
                if (!reader.IsDBNull(reader.GetOrdinal("FAX")))
                    FAX = (System.String)reader["FAX"];
                if (!reader.IsDBNull(reader.GetOrdinal("LineaTransporte")))
                    LineaTransporte = (System.String)reader["LineaTransporte"];
                if (!reader.IsDBNull(reader.GetOrdinal("idLineaTransporte")))
                    idLineaTransporte = (System.Int32)reader["idLineaTransporte"];
                if (!reader.IsDBNull(reader.GetOrdinal("SaldoActual")))
                    SaldoActual = (System.Decimal)reader["SaldoActual"];
                if (!reader.IsDBNull(reader.GetOrdinal("LimiteCredito")))
                    LimiteCredito = (System.Decimal)reader["LimiteCredito"];
                if (!reader.IsDBNull(reader.GetOrdinal("WebSite")))
                    WebSite = (System.String)reader["WebSite"];
                if (!reader.IsDBNull(reader.GetOrdinal("Observaciones")))
                    Observaciones = (System.String)reader["Observaciones"];
                if (!reader.IsDBNull(reader.GetOrdinal("activo")))
                    activo = Convert.ToBoolean(reader["activo"]);
                if (!reader.IsDBNull(reader.GetOrdinal("idListaPrecios")))
                    idListaPrecios = (System.Int32)reader["idListaPrecios"];
                if (!reader.IsDBNull(reader.GetOrdinal("idVendedor")))
                    idVendedor = (System.Int32)reader["idVendedor"];
                if (!reader.IsDBNull(reader.GetOrdinal("idCategoria")))
                    idCategoria = (System.Int32)reader["idCategoria"];
                if (!reader.IsDBNull(reader.GetOrdinal("idCondicionesPago")))
                    idCondicionesPago = (System.Int32)reader["idCondicionesPago"];
            }
        }


        private void GetRecord(DataRow dataRow)
        {
            if (dataRow != null)
            {
                GetKeyData(dataRow);
                if (dataRow["idEmpresa"] != null)
                    idEmpresa = (System.Int32)dataRow["idEmpresa"];
                if (dataRow["NoCliente"] != null)
                    NoCliente = (System.String)dataRow["NoCliente"];
                if (dataRow["RazonSocial"] != null)
                    RazonSocial = (System.String)dataRow["RazonSocial"];
                if (dataRow["NombreComercial"] != null)
                    NombreComercial = (System.String)dataRow["NombreComercial"];
                if (dataRow["RepresentanteLegal"] != null)
                    RepresentanteLegal = (System.String)dataRow["RepresentanteLegal"];
                if (dataRow["RFC"] != null)
                    RFC = (System.String)dataRow["RFC"];
                if (dataRow["Email"] != null)
                    Email = (System.String)dataRow["Email"];

                if (dataRow["F_Calle"] != null)
                    DireccionFacturacion.Calle = (System.String)dataRow["F_Calle"];
                if (dataRow["F_NumeroExterior"] != null)
                    DireccionFacturacion.NumeroExterior = (System.String)dataRow["F_NumeroExterior"];
                if (dataRow["F_NumeroInterior"] != null)
                    DireccionFacturacion.NumeroInterior = (System.String)dataRow["F_NumeroInterior"];
                if (dataRow["F_Colonia"] != null)
                    DireccionFacturacion.Colonia = (System.String)dataRow["F_Colonia"];
                if (dataRow["F_Municipio"] != null)
                    DireccionFacturacion.Municipio = (System.String)dataRow["F_Municipio"];
                if (dataRow["F_Ciudad"] != null)
                    DireccionFacturacion.Ciudad = (System.String)dataRow["F_Ciudad"];
                if (dataRow["F_Estado"] != null)
                    DireccionFacturacion.Estado = (System.String)dataRow["F_Estado"];
                if (dataRow["F_CP"] != null)
                    DireccionFacturacion.CP = (System.String)dataRow["F_CP"];


                if (dataRow["Calle"] != null)
                    DireccionEnvio.Calle = (System.String)dataRow["Calle"];
                if (dataRow["NumeroExterior"] != null)
                    DireccionEnvio.NumeroExterior = (System.String)dataRow["NumeroExterior"];
                if (dataRow["NumeroInterior"] != null)
                    DireccionEnvio.NumeroInterior = (System.String)dataRow["NumeroInterior"];
                if (dataRow["Colonia"] != null)
                    DireccionEnvio.Colonia = (System.String)dataRow["Colonia"];
                if (dataRow["Ciudad"] != null)
                    DireccionEnvio.Ciudad = (System.String)dataRow["Ciudad"];
                if (dataRow["Municipio"] != null)
                    DireccionEnvio.Municipio = (System.String)dataRow["Municipio"];
                if (dataRow["Estado"] != null)
                    DireccionEnvio.Estado = (System.String)dataRow["Estado"];
                if (dataRow["CP"] != null)
                    DireccionEnvio.CP = (System.String)dataRow["CP"];

                if (dataRow["Telefono"] != null)
                    Telefono = (System.String)dataRow["Telefono"];
                if (dataRow["Telefono2"] != null)
                    Telefono2 = (System.String)dataRow["Telefono2"];
                if (dataRow["Telefono3"] != null)
                    Telefono3 = (System.String)dataRow["Telefono3"];
                if (dataRow["FAX"] != null)
                    FAX = (System.String)dataRow["FAX"];
                if (dataRow["LineaTransporte"] != null)
                    LineaTransporte = (System.String)dataRow["LineaTransporte"];
                if (dataRow["idLineaTransporte"] != null)
                    idLineaTransporte = (System.Int32)dataRow["idLineaTransporte"];
                if (dataRow["SaldoActual"] != null)
                    SaldoActual = (System.Decimal)dataRow["SaldoActual"];
                if (dataRow["LimiteCredito"] != null)
                    LimiteCredito = (System.Decimal)dataRow["LimiteCredito"];
                if (dataRow["WebSite"] != null)
                    WebSite = (System.String)dataRow["WebSite"];
                if (dataRow["Observaciones"] != null)
                    Observaciones = (System.String)dataRow["Observaciones"];
                if (dataRow["activo"] != null)
                    activo = (bool)dataRow["activo"];
                if (dataRow["idListaPrecios"] != null)
                    idListaPrecios = (System.Int32)dataRow["idListaPrecios"];
                if (dataRow["idVendedor"] != null)
                    idVendedor = (System.Int32)dataRow["idVendedor"];
                if (dataRow["idCategoria"] != null)
                    idCategoria = (System.Int32)dataRow["idCategoria"];
                if (dataRow["idCondicionesPago"] != null)
                    idCondicionesPago = (System.Int32)dataRow["idCondicionesPago"];
            }
        }


        protected override void UpdateBind()
        {
            StringBuilder strCommand = new StringBuilder();
            strCommand.Append("UPDATE CLIENTES set ");
            strCommand.Append("fechaModificacion='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'");
            strCommand.Append(",idUsuarioModificacion='" + this.idUsuarioModificacion.ToString() + "'");
            strCommand.Append(",idEmpresa='" + this.idEmpresa.ToString() + "'");
            strCommand.Append(",NoCliente=\"" + WLMFunctions.comillas(NoCliente) + "\"");
            strCommand.Append(",RazonSocial=\"" + WLMFunctions.comillas(RazonSocial) + "\"");
            strCommand.Append(",NombreComercial=\"" + WLMFunctions.comillas(NombreComercial) + "\"");
            strCommand.Append(",RepresentanteLegal=\"" + WLMFunctions.comillas(RepresentanteLegal) + "\"");
            strCommand.Append(",RFC=\"" + WLMFunctions.comillas(RFC) + "\"");
            strCommand.Append(",Email=\"" + WLMFunctions.comillas(Email) + "\"");

            strCommand.Append(",F_Calle=\"" + WLMFunctions.comillas(this.DireccionFacturacion.Calle) + "\"");
            strCommand.Append(",F_NumeroExterior=\"" + WLMFunctions.comillas(this.DireccionFacturacion.NumeroExterior) + "\"");
            strCommand.Append(",F_NumeroInterior=\"" + WLMFunctions.comillas(this.DireccionFacturacion.NumeroInterior) + "\"");
            strCommand.Append(",F_Colonia=\"" + WLMFunctions.comillas(this.DireccionFacturacion.Colonia) + "\"");
            strCommand.Append(",F_Municipio=\"" + WLMFunctions.comillas(this.DireccionFacturacion.Municipio) + "\"");
            strCommand.Append(",F_Ciudad=\"" + WLMFunctions.comillas(this.DireccionFacturacion.Ciudad) + "\"");
            strCommand.Append(",F_Estado=\"" + WLMFunctions.comillas(this.DireccionFacturacion.Estado) + "\"");
            strCommand.Append(",F_CP=\"" + WLMFunctions.comillas(this.DireccionFacturacion.CP) + "\"");

            strCommand.Append(",Calle=\"" + WLMFunctions.comillas(this.DireccionEnvio.Calle) + "\"");
            strCommand.Append(",NumeroExterior=\"" + WLMFunctions.comillas(this.DireccionEnvio.NumeroExterior) + "\"");
            strCommand.Append(",NumeroInterior=\"" + WLMFunctions.comillas(this.DireccionEnvio.NumeroInterior) + "\"");
            strCommand.Append(",Colonia=\"" + WLMFunctions.comillas(this.DireccionEnvio.Colonia) + "\"");
            strCommand.Append(",Ciudad=\"" + WLMFunctions.comillas(this.DireccionEnvio.Ciudad) + "\"");
            strCommand.Append(",Municipio=\"" + WLMFunctions.comillas(this.DireccionEnvio.Municipio) + "\"");
            strCommand.Append(",Estado=\"" + WLMFunctions.comillas(this.DireccionEnvio.Estado) + "\"");
            strCommand.Append(",CP=\"" + WLMFunctions.comillas(this.DireccionEnvio.CP) + "\"");

            strCommand.Append(",Telefono=\"" + WLMFunctions.comillas(Telefono) + "\"");
            strCommand.Append(",Telefono2=\"" + WLMFunctions.comillas(Telefono2) + "\"");
            strCommand.Append(",Telefono3=\"" + WLMFunctions.comillas(Telefono3) + "\"");
            strCommand.Append(",FAX=\"" + WLMFunctions.comillas(FAX) + "\"");
            strCommand.Append(",LineaTransporte=\"" + WLMFunctions.comillas(LineaTransporte) + "\"");
            strCommand.Append(",idLineaTransporte='" + this.idLineaTransporte.ToString() + "'");
            strCommand.Append(",SaldoActual=\"" + WLMFunctions.comillas(SaldoActual) + "\"");
            strCommand.Append(",LimiteCredito=\"" + WLMFunctions.comillas(LimiteCredito) + "\"");
            strCommand.Append(",WebSite=\"" + WLMFunctions.comillas(WebSite) + "\"");
            strCommand.Append(",Observaciones=\"" + WLMFunctions.comillas(Observaciones) + "\"");
            strCommand.Append(",activo='" + Convert.ToInt16(activo) + "'");
            strCommand.Append(",idListaPrecios='" + this.idListaPrecios.ToString() + "'");
            strCommand.Append(",idVendedor='" + this.idVendedor.ToString() + "'");
            strCommand.Append(",idCategoria='" + this.idCategoria.ToString() + "'");
            strCommand.Append(",idCondicionesPago='" + this.idCondicionesPago.ToString() + "'");
            strCommand.Append(" WHERE id='" + this.id + "'");
            ConexionDBInterna.ExecuteCommand(strCommand.ToString());
        }
        #endregion
    }

    public class ClientesCollection
    {

        private List<Cliente> _items;
        public List<Cliente> Elementos { get; set; }
        public ClientesCollection()
        {
        }
        public ClientesCollection(ref dbConnector ConexionDB)
        {

            string strCommand = "SELECT id FROM CLIENTES WHERE activo=1 ";
            OdbcDataReader dataReader = ConexionDB.ExecuteReader(strCommand);
            Elementos = new List<Cliente>();
            while (dataReader.Read())
            {
                Cliente newItem = new Cliente(Convert.ToInt32(dataReader["id"]), ref ConexionDB);
                Elementos.Add(newItem);
            }
            dataReader.Close();
            dataReader.Dispose();
        }

        public ClientesCollection(bool AlphaOrdered, ref dbConnector ConexionDB)
        {

            string strCommand = "SELECT id FROM CLIENTES WHERE activo=1 order by RazonSocial ASC";
            OdbcDataReader dataReader = ConexionDB.ExecuteReader(strCommand);
            Elementos = new List<Cliente>();
            while (dataReader.Read())
            {
                Cliente newItem = new Cliente(Convert.ToInt32(dataReader["id"]), ref ConexionDB);
                Elementos.Add(newItem);
            }
            dataReader.Close();
            dataReader.Dispose();
        }
    }

    public class ClienteCategoria : BaseClass
    {


        #region public properties
        public String NombreCategoria { get; set; }
        #endregion

        #region constructors
        public ClienteCategoria(ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
            id = classBinder.NewRecord("CLIENTESCATEGORIAS");
            string queryString = "";
            queryString = "SELECT * FROM CLIENTESCATEGORIAS WHERE id='" + this.id + "'";
            GetRecord(queryString);
        }

        public ClienteCategoria(int registryId, ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            string queryString = "";
            queryString = "SELECT * FROM CLIENTESCATEGORIAS WHERE id='" + registryId + "'";

            this.GetRecord(queryString);
        }

        public ClienteCategoria(string registryId, ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            string queryString = "";
            queryString = "SELECT * FROM CLIENTESCATEGORIAS WHERE LOWER(nombreCategoria)='" + registryId + "'";
            //queryString = "SELECT * FROM PRODUCTOLINEA WHERE LOWER(NombreLinea)='" + Linea + "'";
            this.GetRecord(queryString);
        }



        public ClienteCategoria(DataRow dataRow, ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            this.GetRecord(dataRow);
        }
        #endregion

        #region public methods


        public void Delete()
        {
            string queryString = "";
            queryString = "DELETE FROM CLIENTESCATEGORIAS WHERE id='" + this.id + "'";
            ConexionDBInterna.ExecuteCommand(queryString);

        }
        #endregion


        #region Private Methods
        private void GetRecord(string queryString)
        {
            OdbcDataReader reader = ConexionDBInterna.ExecuteReader(queryString);
            if (reader.HasRows)
            {
                if (!reader.IsDBNull(reader.GetOrdinal("id")))
                    id = (System.Int32)reader["id"];
                if (!reader.IsDBNull(reader.GetOrdinal("fechaCreacion")))
                    fechaCreacion = Convert.ToDateTime(reader["fechaCreacion"]);
                if (!reader.IsDBNull(reader.GetOrdinal("fechaModificacion")))
                    fechaModificacion = Convert.ToDateTime(reader["fechaModificacion"]);
                if (!reader.IsDBNull(reader.GetOrdinal("idUsuario")))
                    idUsuario = (System.Int32)reader["idUsuario"];
                if (!reader.IsDBNull(reader.GetOrdinal("idUsuarioModificacion")))
                    idUsuarioModificacion = (System.Int32)reader["idUsuarioModificacion"];
                if (!reader.IsDBNull(reader.GetOrdinal("NombreCategoria")))
                    NombreCategoria = (System.String)reader["NombreCategoria"];
            }
        }


        private void GetRecord(DataRow dataRow)
        {
            if (dataRow != null)
            {
                if (dataRow["id"] != null)
                    id = (System.Int32)dataRow["id"];
                if (dataRow["fechaCreacion"] != null)
                    fechaCreacion = (System.DateTime)dataRow["fechaCreacion"];
                if (dataRow["fechaModificacion"] != null)
                    fechaModificacion = (System.DateTime)dataRow["fechaModificacion"];
                if (dataRow["idUsuario"] != null)
                    idUsuario = (System.Int32)dataRow["idUsuario"];
                if (dataRow["idUsuarioModificacion"] != null)
                    idUsuarioModificacion = (System.Int32)dataRow["idUsuarioModificacion"];
                if (dataRow["NombreCategoria"] != null)
                    NombreCategoria = (System.String)dataRow["NombreCategoria"];
            }
        }


        protected override void UpdateBind()
        {
            StringBuilder strCommand = new StringBuilder();
            strCommand.Append("UPDATE CLIENTESCATEGORIAS set ");
            strCommand.Append("fechaModificacion='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'");
            strCommand.Append(",idUsuarioModificacion='" + this.idUsuarioModificacion.ToString() + "'");
            strCommand.Append(",NombreCategoria=\"" + WLMFunctions.comillas(NombreCategoria) + "\"");
            strCommand.Append(" WHERE id='" + this.id + "'");
            ConexionDBInterna.ExecuteCommand(strCommand.ToString());
        }
        #endregion
    }

    public class ClientescategoriasCollection
    {

        private List<ClienteCategoria> _items;
        public List<ClienteCategoria> Elementos { get; set; }
        public ClientescategoriasCollection()
        {
        }
        public ClientescategoriasCollection(ref dbConnector ConexionDB)
        {

            string strCommand = "SELECT id FROM CLIENTESCATEGORIAS ";
            OdbcDataReader dataReader = ConexionDB.ExecuteReader(strCommand);
            Elementos = new List<ClienteCategoria>();
            while (dataReader.Read())
            {
                ClienteCategoria newItem = new ClienteCategoria(Convert.ToInt32(dataReader["id"]), ref ConexionDB);
                Elementos.Add(newItem);
            }
            dataReader.Close();
            dataReader.Dispose();
        }
    }
}
